# pymysql 三方库连接数据库
import pymysql

# # 创建连接对象
# """
# 连接数据库需要的内容：
# 账号
# 密码
# ip
# 端口号
# 数据库对象:连接到哪一个数据库
# """
#
# db=pymysql.connect(user='root',password='123456',host='115.29.179.199',database='syr',cursorclass=pymysql.cursors.DictCursor)
# """
# user：数据库的账号
# password：数据库密码
# host：ip地址
# database：你要连接哪一个数据库
# cursorclass：设定返回的对象是字典
# """
# # 通过db对象创建游标
# """
# 用游标进行增删改查的sql执行
# """
# cursor=db.cursor()
#
# # 查询数据库的内容
# cursor.execute('select * from songyueru')
# # 根据sql,找到符合一条的数据
# # result=cursor.fetchone()
# # print(result)
#
# # 根据sql的条件，找到符合所有的数据
# # result=cursor.fetchall()
# # print(result) #打印完就是表中所有信息
# # for line in result:
# #     print(line) #逐行遍历
#
# # 当你不需要使用数据库的时候，要关闭
# #        新增
# """
# 当你对数据库做了真实的改变，就需要数据库对象提交
# 新增，删除，修改
# 查询不算
# """
# # 插
# # cursor.execute("insert into songyueru(name,phone,address) values ('哆啦','18202479083','香港')")
# # db.commit() #需要数据库对象提交
# # cursor.execute("select * from songyueru") #再去查询看看
# # print(cursor.fetchall()) #打印
#
# # 删
# cursor.execute("delete from songyueru where id = '9';")
# db.commit() #需要数据库对象提交
# cursor.execute("select * from songyueru") #再去查询看看
# print(cursor.fetchall()) #打印
#
# # 修
# cursor.execute("update songyueru set name='姜清东' where name='东清'")
# db.commit()
# cursor.execute("select * from songyueru")
# print(cursor.fetchall())
# """
# 关闭顺序
# 先关闭游标
# 再关闭数据库对象
# """
# ======================================================================

#
# import pymysql
# import traceback # 可以将报错信息打印在控制台上面
#
# class DB:
#     def __init__(self,user,password,host,database):
#         self.user = user
#         self.password = password
#         self.host = host
#         self.database = database
#     def connect(self):
#         # 创建数据库对象
#         self.db = pymysql.connect(user = self.user,password= self.password,host=self.host,database=self.database,cursorclass =
#         pymysql.cursors.DictCursor)
#         # 通过数据库对象创建游标
#         self.cursor = self.db.cursor()
#     def close(self):
#         self.cursor.close()
#         self.db.close()
#     def search(self,type:int,sql):
#         """
#         :param type: 1 找到符合第一条的数据  2 找到符合的全部数据
#         :return:
#         """
#         # 先去调用连接数据库的方法
#         self.connect()
#         result = None
#         if type == 1:
#             try:
#                 self.cursor.execute(sql)
#                 result = self.cursor.fetchone()
#                 self.close()
#                 return result
#             except:
#                 self.db.rollback() # 如果出现了异常，就回滚操作
#                 traceback.print_exc()
#                 return result
#         elif type == 2:
#             try:
#                 self.cursor.execute(sql)
#                 result = self.cursor.fetchall()
#                 self.close()
#                 return result
#             except:
#                 self.db.rollback() # 如果出现了异常，就回滚操作
#                 traceback.print_exc()
#                 return result
#     def __edit(self,sql):
#         self.connect()
#         try:
#             self.cursor.execute(sql)
#             self.db.commit()
#             self.close()
#         except:
#             self.db.rollback()
#             traceback.print_exc()
#     def insert(self,sql): # 新增
#         self.__edit(sql)
#     def delete(self,sql): # 删除
#         self.__edit(sql)
#     def update(self,sql): # 更新
#         self.__edit(sql)
# if __name__ == '__main__':
#     # 创建d1对象
#     d1 = DB(user='root',password='123456',host='8.148.229.201',database='jiac')
#     # 查询
#     # print(d1.search(2, "select * from student"))
#     # 新增
#     # d1.insert("insert into student(name,phone,address) values('李四','123','辽宁锦州')")
#     # 查询
#     # print(d1.search(1,"select * from student where name='李四'"))
#     # 删除
#     # d1.delete("delete from student where id=7")
#
#     # 更新操作
#     d1.update("update student set name='张鑫plus' where name='张鑫'")
#     # 查询
#     print(d1.search(2, "select * from student"))

#======================================================================================
"""
做一个学生点名系统，系统里支持：存入学生、更改学生、删除学生、点到学生姓名方法

存入学生（姓名、年龄、家庭地址、手机号）： 存入成功后，提示xxx存入成功
更改学生（姓名、年龄、家庭地址、手机号）：可以修改学生内容的任意一个字段
删除学生：删除的学生将不在展示
展示全部学生：可以看到全部的学生姓名
学生姓名：随机抽取任意一个存在的学生信息，然后打印：到！。举例： 刘闯到！

以上内容，需要连接数据库，每次的数据都需要增、删、改、查去做
"""
import pymysql
import traceback
import random
class System:
    def __init__(self,user,password,host,database):
        self.user = user
        self.password = password
        self.host = host
        self.database = database
    def connect(self):
        self.db = pymysql.connect(user = self.user,password= self.password,host=self.host,database=self.database,cursorclass =
        pymysql.cursors.DictCursor)
        self.cursor = self.db.cursor()
    def close(self):
        self.cursor.close()
        self.db.close()
    def search(self,type:int,sql):
        self.connect()
        result = None
        if type == 1:
            try:
                self.cursor.execute(sql)
                result = self.cursor.fetchone()
                self.close()
                return result
            except:
                self.db.rollback()
                traceback.print_exc()
                return result
        elif type == 2:  #1 找到符合一条的数据  2 找到符合的全部数据
            try:
                self.cursor.execute(sql)
                result = self.cursor.fetchall()
                self.close()
                return result
            except:
                self.db.rollback()
                traceback.print_exc()
                return result
    def __edit(self,sql):
        self.connect()
        try:
            self.cursor.execute(sql)
            self.db.commit()
            self.close()
        except:
            self.db.rollback()
            traceback.print_exc()
    def insert(self,sql):
        self.__edit(sql)
    def delete(self,sql):
        self.__edit(sql)
    def update(self,sql):
        self.__edit(sql)

if __name__ == '__main__':
    d1 = System(user='root', password='123456', host='115.29.179.199', database='syr')
    # 存入学生（姓名、年龄、家庭地址、手机号）： 存入成功后，提示xxx存入成功
    d1.insert("insert into student (name, age, address,phone) values ('朱颖', '20', '成都','13898197967')")
    d1.insert("insert into student (name, age, address,phone) values ('老弟', '18', '重庆','18976548087')")
    # print(d1.search(1, "select * from student where name='朱颖'"))
    # print(d1.search(2, "select * from student where name='老弟'"))
    # print("打印成功")

#     更改学生（姓名、年龄、家庭地址、手机号）：可以修改学生内容的任意一个字段
#     d1.update("update student set name='宋长青' where name='朱颖'")
#     print(d1.search(2,"select * from student"))

# 删除学生：删除的学生将不在展示

    # d1.delete("delete from student where name='宋长青'")
    # print(d1.search(2,"select * from student"))



# 展示全部学生：可以看到全部的学生姓名
#     print(d1.search(2,"select * from student"))
# 学生姓名：随机抽取任意一个存在的学生信息，然后打印：到！。举例： 刘闯到！

"""
类作业，统计镰刀和斧头的数量，要使用类方法
"""

class Count:
    liandao = 0
    futou = 0
    def __init__(self, name):
        self.name = name
        if name == "镰刀":
            Count.liandao += 1
        elif name == "斧头":
            Count.futou += 1
    @classmethod
    def get_liandao(obj):
        return obj.liandao
    @classmethod
    def get_futou(obj):
        return obj.futou
if __name__ == '__main__':
    a = Count("镰刀")
    b = Count("斧头")
    c = Count("镰刀")
    d = Count("斧头")
    # print("镰刀数量：", Count.liandao)
    # print("斧头数量：", Count.futou)


"""
新建学生成绩管理系统，随机生成100个 学生信息插入到数据库：
学生信息组成：学号、学生姓名、英语成绩、数学成绩、语文成绩、班级号（班级号有：1809A，1809B，1810A，1810B）
成绩划分为：优秀，良好，中等，及格，不及格。良好比中等好。
优秀：90—100之间（包括90）
良好：80-90
中等：70-80
及格：60-70
不合格：分数低于60分。
成绩管理系统提供以下方法：
《1》 查询所有英语成绩为优秀的、良好的、中等、及格和不合格的学生姓名和班级号
《2》 查询1809A，1809B，1810A，1810B每个班级的数学成绩，并且是降序返回
《3》 查询1809A，1809B，1810A，1810B每个班级的总人数，并且由大到小排序返回
《4》 查询英语、数学、语文成绩不合格的学生姓名和对应的班级号，按照不合格的人数，由大到小排序
"""
import random
import pymysql
# class System(DB):
#     def __init__(self,):
#     def insert_100(self):
#         self.connect()
#         for i in range(100):
#             name = self.Faker1.name()
#             english = random.randint(0, 120)
#             math = random.randint(0, 120)
#             chinese = random.randint(0, 120)
#             class_id = choice(["1809A","1809B","1810A","1810B"])
#

"""

定义一个图书管理系统类，图书可以新增、修改、删除，要求新增、修改、删除的图书，都要出现在数据库中
新增：图书名、作者名称、新建年月日
修改：图书名、作者名称、新建年月日
删除：图书删掉，且不在展示
查看：全量查询、精确查询、模糊查询需要用户传入形参来控制返回结果
"""
import pymysql
import traceback
import random
class System:
    def __init__(self,user,password,host,database):
        self.user = user
        self.password = password
        self.host = host
        self.database = database
    def connect(self):
        self.db = pymysql.connect(user = self.user,password= self.password,host=self.host,database=self.database,cursorclass =
        pymysql.cursors.DictCursor)
        self.cursor = self.db.cursor()
    def close(self):
        self.cursor.close()
        self.db.close()
    def search(self,type:int,sql):
        self.connect()
        result = None
        if type == 1:
            try:
                self.cursor.execute(sql)
                result = self.cursor.fetchone()
                self.close()
                return result
            except:
                self.db.rollback()
                traceback.print_exc()
                return result
        elif type == 2:  #1 找到符合一条的数据  2 找到符合的全部数据
            try:
                self.cursor.execute(sql)
                result = self.cursor.fetchall()
                self.close()
                return result
            except:
                self.db.rollback()
                traceback.print_exc()
                return result
    def __edit(self,sql):
        self.connect()
        try:
            self.cursor.execute(sql)
            self.db.commit()
            self.close()
        except:
            self.db.rollback()
            traceback.print_exc()
    def insert(self,sql):
        self.__edit(sql)
    def delete(self,sql):
        self.__edit(sql)
    def update(self,sql):
        self.__edit(sql)
if __name__ == '__main__':
    d1 = System(user='root', password='123456', host='115.29.179.199', database='syr')

# 新增：图书名、作者名称、新建年月日
#     d1.insert("insert into book (title, author, create_date) values ('西游记', '朱颖', '2020-08-09')")
#     print(d1.search(1, "select * from book where title='西游记'"))

    # 修改：图书名、作者名称、新建年月日
    d1.update("update book set title='水浒传' where title='西游记'")
    # 删除：图书删掉，且不在展示
    d1.delete("delete from book where title='水浒传'")
# 查
    print(d1.search(2,"select * from book"))